<?php
if (! defined('INCOURSE'))
    return;

class Categories
{

    /**
     * Holds the course categories.
     * The {key} is he identifier of the category. The folder name.
     *
     * @var array
     *
     * @param
     *            link The relative path to the root folder of that category.
     * @param
     *            name The name of the category, it gets rendered.
     */
    private $categories = array(
            'selfunded' => array(
                    'link' => '../selfunded/',
                    'name' => 'Αυτοχρηματοδοτούμενα'
            ),
            'funded' => array(
                    'link' => '../funded/',
                    'name' => 'Επιδοτούμενα'
            )
    );

    function getCategoryLink ($byCategory)
    {
        return $this->categories[$byCategory]['link'];
    }

    function getCategoryDisplayableName ($byCategory)
    {
        return $this->categories[$byCategory]['name'];
    }

    function getRaw ()
    {
        return $this->categories;
    }
}

class Courses
{

    /**
     * Array holding the courses for presenting them in the category pages.
     * The category order is : actualOrder*5.
     * This gives as the ability to add programs in between instead of changing
     * all over again.
     *
     * @param
     *            {page} Defines the page by filename that the course is found.
     * @param
     *            {title} The title of the course.
     * @param
     *            {description} The description of the course.
     * @param
     *            {category} The category by folder name the course belongs to.
     * @param
     *            {mainOrder} The order number for the display of the course in
     *            the
     *            main page. A negative number doesn't show the course.
     * @param
     *            {cateogryOrder} The same as the mainOrder but for the
     *            category
     *            page
     *            that exists in. Nevagite value hides it.
     */
    private $courses = array(
            array(
                    'page' => 'technikoi-trofimwn.php',
                    'title' => 'Υγιεινή και Ασφάλεια Τροφίμων',
                    'description' => 'Εκπαίδευση του προσωπικού των επιχειρήσεων τροφίμων. Σύμφωνα με την
        ισχύουσα νομοθεσία για την Υγιεινή και την Ασφάλεια των Τροφίμων.',
                    'category' => 'selfunded',
                    'mainOrder' => 5,
                    'categoryOrder' => 1
            ),
            array(
                    'page' => 'ecdl.php',
                    'title' => 'Πιστοποίηση Γνώσεων ECDL',
                    'description' => '<b>Για το ΑΣΕΠ, για το Δημόσιο αλλά και για τις Ιδιωτικές Επιχειρήσεις
          ζητείται πλέον πιστοποιημένη γνώση Η/Υ.</b> <br /> Η πιστοποίηση των
        γνώσεων μπορεί να προσφέρει σημαντικά οφέλη σε εργαζόμενους, άνεργους,
        φοιτητές, μαθητές καθώς και σε επιχειρήσεις του Δημοσίου και του
        Ιδιωτικού τομέα.',
                    'category' => 'selfunded',
                    'mainOrder' => 25,
                    'categoryOrder' => 2
            ),
            array(
                    'page' => 'security.php',
                    'title' => 'Προσωπικό Ασφαλείας',
                    'description' => 'Το κέντρο Εκπαιδευτικής Κατάρτισης "Ενοριακό Πνευματικό Κέντρο"
        Καματερού, διοργανώνει εκπαιδευτικά προγράμματα διαρκείας <b>105
          διδακτικών ωρών</b> τα οποία δίνουν τη δυνατότητα στους συμετέχοντες
        να αποκτήσουν Πιστοποιητικό Επαγγελματικής κατάρτισης 1<sup>ου</sup>
        Επιπέδου',
                    'category' => 'selfunded',
                    'mainOrder' => 30,
                    'categoryOrder' => 3
            ),
            array(
                    'page' => 'epitheorites.php',
                    'title' => 'Ενεργειακοί Επιθεωρητές',
                    'description' => 'Τα υποχρεωτικά εκπαιδευτικά προγράμματα είναι τρία, ανάλογα με το
        είδος της Άδειας Ενεργειακής Επιθεώρησης',
                    'category' => 'selfunded',
                    'mainOrder' => 35,
                    'categoryOrder' => 4
            ),
            array(
                    'page' => 'tmima-ecdl.php',
                    'title' => 'Τμήματα Στελεχών Επιχειρήσεων',
                    'description' => 'Πιστοποίηση γνώσεων Πληροφορικής:<b>ECDL</b> <br /> Οι αιτήσεις για το
        πρόγραμμα στελεχών επιχειρήσεων έχουν ξεκινήσει',
                    'category' => 'selfunded',
                    'mainOrder' => 40,
                    'categoryOrder' => 5
            ),
            array(
                    'page' => 'technikoi.php',
                    'title' => 'Τεχνικοί Ασφαλείας',
                    'description' => 'Σύμφωνα με την ισχύουσα νομοθεσία για την ασφάλεια και υγεία των
        εργαζομένων σε όλες τις επιχειρήσεις ανεξαρτήτως αριθμού εργαζομένων ο
        εργοδότης έχει την υποχρέωση να χρησιμοποιεί τις υπηρεσίες τεχνικού
        ασφάλειας.',
                    'category' => 'selfunded',
                    'mainOrder' => - 1,
                    'categoryOrder' => 6
            ),

            // //// FUNDED ////////
            array(
                    'page' => 'voucher-health.php',
                    'title' => 'Voucher Ανέργων Επαγγελματιών Υγείας',
                    'description' => 'Το πρόγραμμα «Κατάρτιση ανέργων επαγγελματιών υγείας σε θέματα
        μεταρρύθμισης της υγείας (βελτιστοποίηση λειτουργίας νοσοκομείων)»,
        δίνει τη δυνατότητα σε νέους ανέργους πτυχιούχους ΑΕΙ/ΤΕΙ να λάβουν
        υπηρεσίες εναλλασσόμενης επαγγελματικής κατάρτισης, με ιδιαίτερη
        βαρύτητα στην υλοποίηση της πρακτικής άσκησης σε δημόσια νοσοκομεία.',
                    'category' => 'funded',
                    'mainOrder' => 10,
                    'categoryOrder' => 5
            ),
            array(
                    'page' => 'voucher-18-29.php',
                    'title' => 'Voucher Ανέργων 18-29',
                    'description' => 'Το πρόγραμμα "Επιταγή εισόδου VOUCHER στην αγορά εργασίας για άνεργους
        νέους έως 29 ετών", διασφαλίζει όλες τις αναγκαίες προϋποθέσεις ένταξης
        των νέων στην αγορά εργασίας. Μέσω στοχευμένων δράσεων κατάρτισης οι
        νέοι θα αποκτήσουν σύγχρονες γνώσεις και δεξιότητες και θα έχουν την
        ευκαιρία να τις χρησιμοποιήσουν άμεσα κατά την διάρκεια της πρακτικής
        άσκησης τους σε πραγματικές συνθήκες εργασιακού περιβάλλοντος. Το
        πρόγραμμα αποτελεί μια μοναδική ευκαιρία εισόδου και παραμονής στην
        αγορά εργασίας για νέους και νέες έως 29 ετών.',
                    'category' => 'funded',
                    'mainOrder' => 15,
                    'categoryOrder' => 10
            ),
            array(
                    'page' => 'voucher-18-29-turism.php',
                    'title' => 'Voucher Ανέργων 18-29 Για Τον
          Τουριστικό Κλάδο',
                    'description' => 'Το πρόγραμμα "Επιταγή εισόδου VOUCHER στην αγορά εργασίας για άνεργους
        νέους έως 29 ετών στον κλάδο του Τουρισμού", αποτελεί μια νέα και
        καινοτόμο προσπάθεια αντιμετώπισης της συνεχώς αυξανόμενης νεανικής
        ανεργίας με την προώθηση μεγάλου αριθμού νέων ανέργων στον ευρύτερο
        κλάδο του τουρισμού.',
                    'category' => 'funded',
                    'mainOrder' => 20,
                    'categoryOrder' => 15
            ),
            array(
                    'page' => 'tpe-voucher.php',
                    'title' => 'Κατάρτιση Ανέργων σε Βασικές Δεξιότητες ΤΠΕ (VOUCHER)',
                    'description' => 'Πιστοποίηση γνώσεων Πληροφορικής:<b>ICT</b> <br /> Απευθύνεται σε"<b>Αποφοίτους
          Γυμνασίιου-Λυκείου-ΑΕΙ-ΤΕΙ</b>',
                    'category' => 'funded',
                    'mainOrder' => - 1,
                    'categoryOrder' => - 1
            ),
            array(
                    'page' => 'xeiristis-mixanimatwn.php',
                    'title' => 'Χεριστής κινητών μηχανημάτων, μηχανημάτων έργου',
                    'description' => '«Παρεμβάσεις υπερ ευπαθών κοινωνικά ομάδων από πιστοποιημένα
        εξειδικευμένα κέντρα κοινωνικής και επαγγελματικής ένταξης ατόμων με
        αναπηρίες [ΑΜΕΑ] και απεξαρτημένων ατόμων ή ατόμων υπό απεξάρτηση,
        καθώς και από πιστοποιημενα κέντρα επαγγελματικής κατάρτισης [ΚΕΚ] στις
        3 περιφέρειες σταδιακής εξόδου»',
                    'category' => 'funded',
                    'mainOrder' => 12,
                    'categoryOrder' => 3
            ),
            array(
                    'page' => 'voucher-security.php',
                    'title' => 'Voucher Security',
                    'description' => 'Νέα προγράμματα επιταγής εισόδου στην
                            αγορά εργασίας για νέους (voucher ανέργων) όλων των
                            κλάδων και των ειδικοτήτων αναμένονται να ανακοινωθούν
                            τον Μάιο του 2014 από το Υπουργείο Εργασίας.
                            Η επιδότηση της κατάρτισης και της πρακτικής άσκησης
                            σε ιδιωτικές επιχειρήσεις όλων των κλάδων της οικονομίας,
                            αλλά και η δυνατότητα πρόσληψης μετά την ολοκλήρωση της
                            πρακτικής άσκησης σου εξασφαλίζει τις κατάλληλες
                            προϋποθέσεις ένταξης.',
                    'category' => 'funded',
                    'mainOrder' => 2,
                    'categoryOrder' => 2
            ),
            array(
                    'page' => 'voucher-2014.php',
                    'title' => 'Voucher 2014',
                    'description' => 'Αναμένεται άμεσα να ανακοινωθεί νέο
                        Επιδοτούμενο Πρόγραμμα Κατάρτισης και Απασχόλησης Ανέργων
                        18 ως 29 ετών , μέσω Επιταγής κατάρτισης Voucher',
                    'category' => 'funded',
                    'mainOrder' => 1,
                    'categoryOrder' => 1
            ),
            array(
                    'page' => '',
                    'title' => '',
                    'description' => '',
                    'category' => 'uncategorized',
                    'mainOrder' => - 1,
                    'categoryOrder' => - 1
            )
    );

    /**
     * The category of the courses to return.
     *
     * @var string
     */
    private $category;

    private $result;

    public function Courses ($category = null)
    {
        if ($category !== null)
        {
            $this->category = $category;
            $this->result = $this->getProgramsByCategory();
        }
        // $result = $this->getProgramsByCategory($this->category);
    }

    function setCategory ($category)
    {
        $this->category = $category;
    }

    function getDefault ()
    {
        return $this->result;
    }

    /**
     * Sorts an array by the orderValue.
     * If that value is 0 or undefined. It sorts the rest and appends the nulls
     * at
     * the end.
     */
    function sortByOrder ($sortBy = 'mainOrder')
    {
        $emptyValues = array();
        $ordered = array();
        $exclude = $sortBy == 'mainOrder' ? false : true;
        $programs = $this->getAllCourses();

        foreach ($this->courses as $indexed)
        {
            if ($indexed[$sortBy] < 0 ||
                     $exclude && $category !== $indexed['category'])
                continue;

            if (isset($indexed[$sortBy]) && $indexed[$sortBy] != 0)
                $ordered[$indexed[$sortBy]] = $indexed;
            else
            {
                if (! empty($indexed['title']) || ! empty($indexed['page']))

                    array_push($emptyValues, $indexed); // $emptyValues =
                                                            // $indexed;
            }
        }
        // Sort the keys and Merge the two arrays.
        // array_merge($ordered, $emptyValues);
        ksort($ordered);
        /*
         * DEBUG STAFF echo 'ordered sorted'; var_dump($ordered); echo
         * '<br/>empty values'; var_dump($emptyValues); echo'<br/>arrays
         * merged'; var_dump(); $tmp = $ordered+$emptyValues; echo'<br/>arrays
         * added'; var_dump($tmp);
         */
        return array_merge($ordered, $emptyValues);
    }

    function sortByCategory ($category = null, $array = null)
    {
        $category = $category == null ? $this->category : $category;
        $array = $array == null ? $this->getActiveByCategory($category) : $array;

        $returnable = array();
        $unordered = array();

        foreach ($array as $course)
        {
            if ($course['categoryOrder'] > 0)
                $returnable[$course['categoryOrder']] = $course;
            else
                $unordered[] = $course;
        }
        ksort($returnable);
        return array_merge($returnable, $unordered);
    }

    /**
     * Fetches the courses of a specific category.
     * Returns only the courses that have a value of categoryOrder >= 0
     *
     * @param $category string:
     *            The category of the courses to return. Defaults to the
     *            current.
     * @param $array array:
     *            An array of courses. Defaults to the current array of
     *            courses..
     */
    function getProgramsByCategory ($category = null, Array $courses = null)
    {
        $theCourses = $courses == null ? $this->courses : $courses;
        $category = $category == null ? $this->category : $category;
        $returnable = array();

        foreach ($theCourses as $course)
        {
            if (! isset($course['category']) || $course['category'] !== $category)
                continue;
            else
                $returnable[] = $course;
        }
        return $returnable;
    }

    function getAllCourses ()
    {
        $returnable = array();

        foreach ($this->courses as $course)
        {
            if (! isset($course['category']) || ! isset($course['title']) ||
                     ! isset($course['page']))
                continue;
            else
                $returnable[] = $course;
        }
        return $returnable;
    }

    function getMainActive ()
    {
        $programs = $this->getAllCourses();
        $returnable = array();
        foreach ($programs as $course)
        {
            if ($course['mainOrder'] >= 0)
            {
                $returnable[] = $course;
            }
        }
        return $returnable;
    }

    function getActiveByCategory ($category = null)
    {
        $programs = $this->getAllCourses();
        $category = $category == null ? $this->category : $category;

        $returnable = array();
        foreach ($programs as $course)
        {
            if ($course['category'] == $category && $course['categoryOrder'] >= 0)
            {
                $returnable[] = $course;
            }
        }
        return $returnable;
    }

    function sortAll ()
    {
    }

    function getRaw ()
    {
        return $this->courses;
    }

    function getMainInnactive ()
    {
        $programs = $this->getAllcourses();
        $returnable = array();
        foreach ($programs as $course)
        {
            if ($course['mainOrder'] < 0)
            {
                $returnable[] = $course;
            }
        }
        return $returnable;
    }

    function getCategoryInnactive ()
    {
        $programs = $this->getAllcourses();
        $returnable = array();
        foreach ($programs as $course)
        {
            if ($course['mainOrder'] < 0)
            {
                $returnable[] = $course;
            }
        }
        return $returnable;
    }
}